/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidade.persistencia;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author victorinox
 */
@Entity
@Table(name = "entrada_saida", catalog = "carlossa03", schema = "")
@NamedQueries({@NamedQuery(name = "EntradaSaida.findAll", query = "SELECT e FROM EntradaSaida e"), @NamedQuery(name = "EntradaSaida.findByEntradaSaidaId", query = "SELECT e FROM EntradaSaida e WHERE e.entradaSaidaId = :entradaSaidaId"), @NamedQuery(name = "EntradaSaida.findByDataOperacao", query = "SELECT e FROM EntradaSaida e WHERE e.dataOperacao = :dataOperacao"), @NamedQuery(name = "EntradaSaida.findByDataVencimento", query = "SELECT e FROM EntradaSaida e WHERE e.dataVencimento = :dataVencimento"), @NamedQuery(name = "EntradaSaida.findByQuantidadeParcela", query = "SELECT e FROM EntradaSaida e WHERE e.quantidadeParcela = :quantidadeParcela"), @NamedQuery(name = "EntradaSaida.findByParcelaAtual", query = "SELECT e FROM EntradaSaida e WHERE e.parcelaAtual = :parcelaAtual"), @NamedQuery(name = "EntradaSaida.findByValor", query = "SELECT e FROM EntradaSaida e WHERE e.valor = :valor")})
public class EntradaSaida implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "entrada_saida_id")
    private Integer entradaSaidaId;
    @Basic(optional = false)
    @Column(name = "data_operacao")
    @Temporal(TemporalType.DATE)
    private Date dataOperacao;
    @Basic(optional = false)
    @Column(name = "data_vencimento")
    @Temporal(TemporalType.DATE)
    private Date dataVencimento;
    @Basic(optional = false)
    @Column(name = "quantidade_parcela")
    private int quantidadeParcela;
    @Basic(optional = false)
    @Column(name = "parcela_atual")
    private int parcelaAtual;
    @Basic(optional = false)
    @Column(name = "valor")
    private float valor;
    @JoinTable(name = "entrada_saida_venda", joinColumns = {@JoinColumn(name = "entrada_saida_id", referencedColumnName = "entrada_saida_id")}, inverseJoinColumns = {@JoinColumn(name = "venda_id", referencedColumnName = "venda_id")})
    @ManyToMany(fetch = FetchType.LAZY)
    private List<Venda> vendaCollection;
    @ManyToMany(mappedBy = "entradaSaidaCollection", fetch = FetchType.LAZY)
    private List<FolhaPagamento> folhaPagamentoCollection;
    @ManyToMany(mappedBy = "entradaSaidaCollection", fetch = FetchType.LAZY)
    private List<Manutencao> manutencaoCollection;
    @JoinTable(name = "entrada_saida_compra", joinColumns = {@JoinColumn(name = "entrada_saida_id", referencedColumnName = "entrada_saida_id")}, inverseJoinColumns = {@JoinColumn(name = "compra_id", referencedColumnName = "compra_id")})
    @ManyToMany(fetch = FetchType.LAZY)
    private List<Compra> compraCollection;

    @Transient
    private String resumoDinamico; //preenchido em tempo de execução

    @Transient
    private Float totalOperacao; //preenchido em tempo de execução

    public EntradaSaida() {
    }

    public EntradaSaida(Integer entradaSaidaId) {
        this.entradaSaidaId = entradaSaidaId;
    }

    public EntradaSaida(Integer entradaSaidaId, Date dataOperacao, Date dataVencimento, int quantidadeParcela, int parcelaAtual, float valor) {
        this.entradaSaidaId = entradaSaidaId;
        this.dataOperacao = dataOperacao;
        this.dataVencimento = dataVencimento;
        this.quantidadeParcela = quantidadeParcela;
        this.parcelaAtual = parcelaAtual;
        this.valor = valor;
    }

    public Integer getEntradaSaidaId() {
        return entradaSaidaId;
    }

    public void setEntradaSaidaId(Integer entradaSaidaId) {
        this.entradaSaidaId = entradaSaidaId;
    }

    public Date getDataOperacao() {
        return dataOperacao;
    }

    public void setDataOperacao(Date dataOperacao) {
        this.dataOperacao = dataOperacao;
    }

    public Date getDataVencimento() {
        return dataVencimento;
    }

    public void setDataVencimento(Date dataVencimento) {
        this.dataVencimento = dataVencimento;
    }

    public int getQuantidadeParcela() {
        return quantidadeParcela;
    }

    public void setQuantidadeParcela(int quantidadeParcela) {
        this.quantidadeParcela = quantidadeParcela;
    }

    public int getParcelaAtual() {
        return parcelaAtual;
    }

    public void setParcelaAtual(int parcelaAtual) {
        this.parcelaAtual = parcelaAtual;
    }

    public float getValor() {
        return valor;
    }

    public void setValor(float valor) {
        this.valor = valor;
    }

    public List<Venda> getVendaCollection() {
        return vendaCollection;
    }

    public void setVendaCollection(List<Venda> vendaCollection) {
        this.vendaCollection = vendaCollection;
    }

    public List<FolhaPagamento> getFolhaPagamentoCollection() {
        return folhaPagamentoCollection;
    }

    public void setFolhaPagamentoCollection(List<FolhaPagamento> folhaPagamentoCollection) {
        this.folhaPagamentoCollection = folhaPagamentoCollection;
    }

    public List<Manutencao> getManutencaoCollection() {
        return manutencaoCollection;
    }

    public void setManutencaoCollection(List<Manutencao> manutencaoCollection) {
        this.manutencaoCollection = manutencaoCollection;
    }

    public List<Compra> getCompraCollection() {
        return compraCollection;
    }

    public void setCompraCollection(List<Compra> compraCollection) {
        this.compraCollection = compraCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (entradaSaidaId != null ? entradaSaidaId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof EntradaSaida)) {
            return false;
        }
        EntradaSaida other = (EntradaSaida) object;
        if ((this.entradaSaidaId == null && other.entradaSaidaId != null) || (this.entradaSaidaId != null && !this.entradaSaidaId.equals(other.entradaSaidaId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidade.persistencia.EntradaSaida[entradaSaidaId=" + entradaSaidaId + "]";
    }

    /**
     * @return the resumoDinamico
     */
    public String getResumoDinamico() {
        return resumoDinamico;
    }

    /**
     * @param resumoDinamico the resumoDinamico to set
     */
    public void setResumoDinamico(String resumoDinamico) {
        this.resumoDinamico = resumoDinamico;
    }

    /**
     * @return the totalOperacao
     */
    public Float getTotalOperacao() {
        return totalOperacao;
    }

    /**
     * @param totalOperacao the totalOperacao to set
     */
    public void setTotalOperacao(Float totalOperacao) {
        this.totalOperacao = totalOperacao;
    }

    public Boolean getIsValorPositivo(){
        return valor > 0 ? true : false;
    }

    public void setIsValorPositivo(Boolean ops){
        
    }

}
